// 引入路由
import router from '@/router'
// 引入进度条插件
import nprogress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'
// 引入仓库
import store from '@/store'
import { asyncRoutes} from '@/router'

/**
 * 前置守卫
 */

// 白名单页面
const whiteList = ['/login', '/404']

router.beforeEach( async (to, from, next) => {
  // 打开进度条
  nprogress.start()
  // 判断有没有token
  if (store.getters.token) {
    // 存在
    // 判断是否跳转到登录页，如果是的话就跳转到首页
    if (to.path === '/login') {
      next('/') // 中转到首页
      nprogress.done()  // 关闭进度条
    }
    else{
      // 判断当前是否有用户信息
      if (!store.getters.userId) {
        // 获取用户信息
       const res = await  store.dispatch('user/getUser')
      //  console.log(res.roles.menus);
       const filetrRoutes = asyncRoutes.filter(item => {
        return res.roles.menus.includes(item.name)
       })
       store.commit('user/setRoutes', filetrRoutes)
      router.addRoutes([...filetrRoutes,{ path: '*', redirect: '/404', hidden: true }] )  // 动态添加路由
       next(to.path) // 跳转到之前想要跳转的页面
      }
      else{
        // 放行
      next()
      }
      
    }
  }
  else{
    // 没有
    // 判断想要跳转的页面在不在白名单页面中
    if (whiteList.includes(to.path)) {
      next()
    }
    else {
      next('/login') // 中转到登录页面
      nprogress.done()  // 关闭进度条
    }
    
  }

})

/**
 * 后置守卫
 */

router.afterEach(() => {
  // 关闭进度条
  nprogress.done()
})